library(ggplot2)
library(plotly)
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio

Attaching package: ‘plotly’

The following object is masked from ‘package:ggplot2’:

    last_plot

The following object is masked from ‘package:stats’:

    filter

The following object is masked from ‘package:graphics’:

    layout
par(mfrow=c(2,3))
plot(x,y, pch=20)
plot(x,y, pch=20)
abline(h=0.5, col='red')
plot(x,y, pch=20)
abline(v=0.5, col='red')
abline(h=0.5, col='red')
plot(x,y, pch=20)
abline(v=0.33, col='red')
abline(h=0.33, col='red')
abline(v=0.66, col='red')
abline(h=0.66, col='red')
plot(x,y, pch=20)
abline(v=0.25, col='red')
abline(h=0.25, col='red')
abline(v=0.50, col='red')
abline(h=0.50, col='red')
abline(v=0.75, col='red')
abline(h=0.75, col='red')
plot(x,y, pch=20)
abline(v=0.2, col='red')
abline(h=0.2, col='red')
abline(v=0.40, col='red')
abline(h=0.40, col='red')
abline(v=0.6, col='red')
abline(h=0.6, col='red')
abline(v=0.8, col='red')
abline(h=0.8, col='red')

rotate <- function(x) t(apply(x, 2, rev))
matrizAsociadaProbabilidad=function(x,y, xmin, xmax, ymin, ymax, tamanio){
  m = matrix(0, ncol=tamanio, nrow=tamanio)
  for(punInd in c(1:length(x))){ #Por cada punto
    for(c in c(1:ncol(m))){
      stepX = (xmax-xmin)/tamanio
      if(x[punInd]<stepX*c+xmin & x[punInd]>stepX*(c-1)+xmin ){
        #Pertenece a columna c-esima
        for(f in c(1:nrow(m))){
          stepY = (ymax-ymin)/tamanio
          if(y[punInd]<stepY*f+xmin & y[punInd]>stepY*(f-1)+xmin ){
            m[c,f] = m[c,f]+1
            f = nrow(m)
            c = ncol(m)
          }
        }
      }
      #segui buscando tu columna
    }
  }
  return((rotate(rotate(rotate(m/length(x))))))
}
rango = 0.015
totx = c()
toty = c()
for (j in c(1:10000)) {
  x= runif(2, 0.49, 0.51)
  y = runif(2, 0.49, 0.51)
  for (i in c(2:500)) {
    x[i] = x[i-1]+runif(1,-rango,rango) 
    y[i] = y[i-1]+runif(1,-rango,rango) 
  }
  totx[j]=x[length(x)]
  toty[j]=y[length(y)]
}
x = totx
y = toty
m = matrizAsociadaProbabilidad(x,y, 0,1,0,1, 10)
m
        [,1]   [,2]   [,3]   [,4]   [,5]   [,6]   [,7]   [,8]   [,9]
 [1,] 0.0002 0.0008 0.0017 0.0018 0.0024 0.0025 0.0022 0.0018 0.0005
 [2,] 0.0007 0.0018 0.0040 0.0048 0.0061 0.0089 0.0067 0.0051 0.0021
 [3,] 0.0013 0.0045 0.0091 0.0134 0.0178 0.0174 0.0138 0.0078 0.0042
 [4,] 0.0017 0.0063 0.0125 0.0213 0.0305 0.0322 0.0208 0.0123 0.0064
 [5,] 0.0029 0.0087 0.0161 0.0321 0.0402 0.0385 0.0280 0.0163 0.0082
 [6,] 0.0029 0.0079 0.0192 0.0294 0.0364 0.0426 0.0306 0.0208 0.0076
 [7,] 0.0014 0.0072 0.0120 0.0199 0.0310 0.0342 0.0233 0.0141 0.0071
 [8,] 0.0015 0.0035 0.0082 0.0142 0.0174 0.0185 0.0138 0.0079 0.0033
 [9,] 0.0006 0.0012 0.0040 0.0055 0.0085 0.0068 0.0052 0.0028 0.0013
[10,] 0.0001 0.0005 0.0018 0.0024 0.0035 0.0038 0.0029 0.0012 0.0012
       [,10]
 [1,] 0.0000
 [2,] 0.0010
 [3,] 0.0008
 [4,] 0.0015
 [5,] 0.0030
 [6,] 0.0030
 [7,] 0.0023
 [8,] 0.0010
 [9,] 0.0005
[10,] 0.0002
plot(x,y, xlim=c(0,1), ylim=c(0,1))

evaluarEnMatriz=function(m,x,y, xmin, xmax, ymin, ymax, tamanio){
    for(c in c(1:ncol(m))){
      stepX = (xmax-xmin)/tamanio
      if(x<stepX*c+xmin & x>stepX*(c-1)+xmin ){
        #Pertenece a columna c-esima
        for(f in c(1:nrow(m))){
          stepY = (ymax-ymin)/tamanio
          if(y<stepY*f+xmin & y>stepY*(f-1)+xmin ){
            return(m[c,f])
          }
        }
      }
  }
}
evaluarEnMatriz(m, 0.72,0.51,0,1,0,1,10)
[1] 0.0185
z = c(1:length(x))
for (i in 1:length(x)) {
  #print(x[i])

  if(is.null(x[i])){
    x[i]=0.5
  }
  if(is.null(y[i])){
    y[i]=0.5
  }
  if(x[i]>=1){
    x[i]=0.99
  }
  if(x[i]<=0){
    x[i]=0.01
  }
  if(y[i]>=1){
    y[i]=0.99
  }
  if(y[i]<=0){
    y[i]=0.01
  }
  #print(i)
  z[i]= evaluarEnMatriz(m, x[i],y[i],0,1,0,1,10)
}
xs = x
ys = y
zs = z
fig <- plot_ly(x=~xs, y=~ys, z=~zs, type="scatter3d", mode="markers",  size = 1)
fig <- fig %>% layout(title = '3 zonas distribuicion',
         xaxis = list(title = 'Superficie cubierta',
                      zeroline = TRUE,
                      range = c(0, 250)),
         yaxis = list(title = 'Habitaciones',
                      range = c(0,1400)))

fig
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQpgYGB7cn0KbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KHBsb3RseSkKYGBgCgoKYGBge3J9CnBhcihtZnJvdz1jKDIsMykpCnBsb3QoeCx5LCBwY2g9MjApCnBsb3QoeCx5LCBwY2g9MjApCmFibGluZShoPTAuNSwgY29sPSdyZWQnKQpwbG90KHgseSwgcGNoPTIwKQphYmxpbmUodj0wLjUsIGNvbD0ncmVkJykKYWJsaW5lKGg9MC41LCBjb2w9J3JlZCcpCnBsb3QoeCx5LCBwY2g9MjApCmFibGluZSh2PTAuMzMsIGNvbD0ncmVkJykKYWJsaW5lKGg9MC4zMywgY29sPSdyZWQnKQphYmxpbmUodj0wLjY2LCBjb2w9J3JlZCcpCmFibGluZShoPTAuNjYsIGNvbD0ncmVkJykKcGxvdCh4LHksIHBjaD0yMCkKYWJsaW5lKHY9MC4yNSwgY29sPSdyZWQnKQphYmxpbmUoaD0wLjI1LCBjb2w9J3JlZCcpCmFibGluZSh2PTAuNTAsIGNvbD0ncmVkJykKYWJsaW5lKGg9MC41MCwgY29sPSdyZWQnKQphYmxpbmUodj0wLjc1LCBjb2w9J3JlZCcpCmFibGluZShoPTAuNzUsIGNvbD0ncmVkJykKcGxvdCh4LHksIHBjaD0yMCkKYWJsaW5lKHY9MC4yLCBjb2w9J3JlZCcpCmFibGluZShoPTAuMiwgY29sPSdyZWQnKQphYmxpbmUodj0wLjQwLCBjb2w9J3JlZCcpCmFibGluZShoPTAuNDAsIGNvbD0ncmVkJykKYWJsaW5lKHY9MC42LCBjb2w9J3JlZCcpCmFibGluZShoPTAuNiwgY29sPSdyZWQnKQphYmxpbmUodj0wLjgsIGNvbD0ncmVkJykKYWJsaW5lKGg9MC44LCBjb2w9J3JlZCcpCmBgYApgYGB7cn0Kcm90YXRlIDwtIGZ1bmN0aW9uKHgpIHQoYXBwbHkoeCwgMiwgcmV2KSkKYGBgCgpgYGB7cn0KbWF0cml6QXNvY2lhZGFQcm9iYWJpbGlkYWQ9ZnVuY3Rpb24oeCx5LCB4bWluLCB4bWF4LCB5bWluLCB5bWF4LCB0YW1hbmlvKXsKICBtID0gbWF0cml4KDAsIG5jb2w9dGFtYW5pbywgbnJvdz10YW1hbmlvKQogIGZvcihwdW5JbmQgaW4gYygxOmxlbmd0aCh4KSkpeyAjUG9yIGNhZGEgcHVudG8KICAgIGZvcihjIGluIGMoMTpuY29sKG0pKSl7CiAgICAgIHN0ZXBYID0gKHhtYXgteG1pbikvdGFtYW5pbwogICAgICBpZih4W3B1bkluZF08c3RlcFgqYyt4bWluICYgeFtwdW5JbmRdPnN0ZXBYKihjLTEpK3htaW4gKXsKICAgICAgICAjUGVydGVuZWNlIGEgY29sdW1uYSBjLWVzaW1hCiAgICAgICAgZm9yKGYgaW4gYygxOm5yb3cobSkpKXsKICAgICAgICAgIHN0ZXBZID0gKHltYXgteW1pbikvdGFtYW5pbwogICAgICAgICAgaWYoeVtwdW5JbmRdPHN0ZXBZKmYreG1pbiAmIHlbcHVuSW5kXT5zdGVwWSooZi0xKSt4bWluICl7CiAgICAgICAgICAgIG1bYyxmXSA9IG1bYyxmXSsxCiAgICAgICAgICAgIGYgPSBucm93KG0pCiAgICAgICAgICAgIGMgPSBuY29sKG0pCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgICNzZWd1aSBidXNjYW5kbyB0dSBjb2x1bW5hCiAgICB9CiAgfQogIHJldHVybigocm90YXRlKHJvdGF0ZShyb3RhdGUobS9sZW5ndGgoeCkpKSkpKQp9CmBgYApgYGB7cn0KcmFuZ28gPSAwLjAxNQp0b3R4ID0gYygpCnRvdHkgPSBjKCkKZm9yIChqIGluIGMoMToxMDAwMCkpIHsKICB4PSBydW5pZigyLCAwLjQ5LCAwLjUxKQogIHkgPSBydW5pZigyLCAwLjQ5LCAwLjUxKQogIGZvciAoaSBpbiBjKDI6NTAwKSkgewogICAgeFtpXSA9IHhbaS0xXStydW5pZigxLC1yYW5nbyxyYW5nbykgCiAgICB5W2ldID0geVtpLTFdK3J1bmlmKDEsLXJhbmdvLHJhbmdvKSAKICB9CiAgdG90eFtqXT14W2xlbmd0aCh4KV0KICB0b3R5W2pdPXlbbGVuZ3RoKHkpXQp9CnggPSB0b3R4CnkgPSB0b3R5CmBgYApgYGB7cn0KbSA9IG1hdHJpekFzb2NpYWRhUHJvYmFiaWxpZGFkKHgseSwgMCwxLDAsMSwgMTApCm0KcGxvdCh4LHksIHhsaW09YygwLDEpLCB5bGltPWMoMCwxKSkKYGBgCmBgYHtyfQpldmFsdWFyRW5NYXRyaXo9ZnVuY3Rpb24obSx4LHksIHhtaW4sIHhtYXgsIHltaW4sIHltYXgsIHRhbWFuaW8pewogICAgZm9yKGMgaW4gYygxOm5jb2wobSkpKXsKICAgICAgc3RlcFggPSAoeG1heC14bWluKS90YW1hbmlvCiAgICAgIGlmKHg8c3RlcFgqYyt4bWluICYgeD5zdGVwWCooYy0xKSt4bWluICl7CiAgICAgICAgI1BlcnRlbmVjZSBhIGNvbHVtbmEgYy1lc2ltYQogICAgICAgIGZvcihmIGluIGMoMTpucm93KG0pKSl7CiAgICAgICAgICBzdGVwWSA9ICh5bWF4LXltaW4pL3RhbWFuaW8KICAgICAgICAgIGlmKHk8c3RlcFkqZit4bWluICYgeT5zdGVwWSooZi0xKSt4bWluICl7CiAgICAgICAgICAgIHJldHVybihtW2MsZl0pCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgfQp9CmBgYAoKYGBge3J9CmV2YWx1YXJFbk1hdHJpeihtLCAwLjcyLDAuNTEsMCwxLDAsMSwxMCkKYGBgCgoKYGBge3J9CnogPSBjKDE6bGVuZ3RoKHgpKQpmb3IgKGkgaW4gMTpsZW5ndGgoeCkpIHsKICAjcHJpbnQoeFtpXSkKCiAgaWYoaXMubnVsbCh4W2ldKSl7CiAgICB4W2ldPTAuNQogIH0KICBpZihpcy5udWxsKHlbaV0pKXsKICAgIHlbaV09MC41CiAgfQogIGlmKHhbaV0+PTEpewogICAgeFtpXT0wLjk5CiAgfQogIGlmKHhbaV08PTApewogICAgeFtpXT0wLjAxCiAgfQogIGlmKHlbaV0+PTEpewogICAgeVtpXT0wLjk5CiAgfQogIGlmKHlbaV08PTApewogICAgeVtpXT0wLjAxCiAgfQogICNwcmludChpKQogIHpbaV09IGV2YWx1YXJFbk1hdHJpeihtLCB4W2ldLHlbaV0sMCwxLDAsMSwxMCkKfQpgYGAKCmBgYHtyfQp4cyA9IHgKeXMgPSB5CnpzID0gegpmaWcgPC0gcGxvdF9seSh4PX54cywgeT1+eXMsIHo9fnpzLCB0eXBlPSJzY2F0dGVyM2QiLCBtb2RlPSJtYXJrZXJzIiwgIHNpemUgPSAxKQpmaWcgPC0gZmlnICU+JSBsYXlvdXQodGl0bGUgPSAnMyB6b25hcyBkaXN0cmlidWljaW9uJywKICAgICAgICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gJ1N1cGVyZmljaWUgY3ViaWVydGEnLAogICAgICAgICAgICAgICAgICAgICAgemVyb2xpbmUgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBjKDAsIDI1MCkpLAogICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAnSGFiaXRhY2lvbmVzJywKICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gYygwLDE0MDApKSkKCmZpZwpgYGAKCgo=